package com.wicket.okrframework.integration.dto;

import com.wicket.okrframework.common.dto.BaseDto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import javax.validation.constraints.NotNull;
import lombok.Data;

/**
 * @desc BaseChangeColumnDto
 * @使用场景
 */
@Data
public class BaseChangeColumnDto extends BaseDto implements Serializable {

  /**
   * 变更字段记录ID
   */
  @NotNull(message = "变更字段记录ID不能为空")
  @ApiModelProperty("变更字段记录ID")
  private String changeColumnId;

  /**
   * 对象属性编码
   */
  @NotNull(message = "对象属性编码不能为空")
  @ApiModelProperty("对象属性编码")
  private String objectPropertyCode;

  /**
   * 对象属性名称
   */
  @NotNull(message = "对象属性名称不能为空")
  @ApiModelProperty("对象属性名称")
  private String objectPropertyName;

  /**
   * 变更字段内容
   */
  @NotNull(message = "变更字段内容不能为空")
  @ApiModelProperty("变更字段内容")
  private String metaDataColumnContent;

  /**
   * 原始字段中文内容
   */
  @NotNull(message = "原始字段中文内容不能为空")
  @ApiModelProperty("原始字段中文内容")
  private String oriColumnContent;

  /**
   * 变更字段中文内容
   */
  @NotNull(message = "变更字段中文内容不能为空")
  @ApiModelProperty("变更字段中文内容")
  private String columnContent;

  /**
   * 主体变更日志类型
   */
  @ApiModelProperty("主体变更日志类型")
  private String subjectChangeType;

  /**
   * 主体批次下更新状态 NEW:本次新增 UNCHANGED:正常未变 REVISION:本次修订 ARCHIVE:本次存档
   */
  @ApiModelProperty("主体批次下更新状态")
  private String subjectUpdateStatus;

  /**
   * 操作人就职记录ID
   */
  @ApiModelProperty("操作人就职记录ID")
  private String operationInductionId;

  /**
   * 操作时间
   */
  @ApiModelProperty("操作时间")
  private Date operateTime;

  /**
   * 是否内部属性 TRUE:是 FALSE:否
   */
  @ApiModelProperty("是否内部属性")
  private String isInproperties;

  /**
   * 内容表类型编码 OMS_TARGET_CYCLE:目标周期表 OMS_EVALUATION_OBJECT_TARGET_CYCLE:被评对象目标周期表 OMS_TARGET:目标表 OMS_TARGET_CATEGORY:目标分类表 OMS_TARGET_OBJECTIVE:指标表 OMS_TASK:任务表 OMS_ORG_INDUCTION_RECORD:就职记录表 OMS_FRAMEWORK_ORIGINAL_ROLE_MEMBER:身份人员表 OMS_ORG_DEPT:部门表 OMS_BASE_HOST:宿主表 OMS_FRAMEWORK_SPACE:空间表 OMS_TSPE_CYCLE_STAGE_DATA:周期阶段资料记录 OMS_EVALUATION_TEMPLATE:评价模板 OMS_EVALUATION_PORTRAIT:评价画像表 OMS_ORG_POSITION:职务表 OMS_VIRTUAL_ORG_MEMBER:虚拟组织成员表 OMS_PLANNING:规划资料表 OMS_FRAMEWORK_USERS:个人账号表
   */
  @NotNull(message = "内容表类型编码不能为空")
  @ApiModelProperty("内容表类型编码")
  private String tableTypeCode;

  /**
   * 内容表主键行为日志英文名称
   */
  @NotNull(message = "内容表主键行为日志英文名称不能为空")
  @ApiModelProperty("内容表主键行为日志英文名称")
  private String entityName;

  /**
   * 内容表主键ID
   */
  @NotNull(message = "内容表主键ID不能为空")
  @ApiModelProperty("内容表主键ID")
  private String entityId;

  @Override
  public boolean equals(Object o) {
    if (this == o) return true;
    if (o == null || getClass() != o.getClass()) return false;
    if (!super.equals(o)) return false;
    BaseChangeColumnDto that = (BaseChangeColumnDto) o;
    return (
      changeColumnId == that.changeColumnId &&
      objectPropertyCode == that.objectPropertyCode &&
      objectPropertyName == that.objectPropertyName &&
      metaDataColumnContent == that.metaDataColumnContent &&
      oriColumnContent == that.oriColumnContent &&
      columnContent == that.columnContent &&
      subjectChangeType == that.subjectChangeType &&
      subjectUpdateStatus == that.subjectUpdateStatus &&
      operationInductionId == that.operationInductionId &&
      operateTime == that.operateTime &&
      isInproperties == that.isInproperties &&
      tableTypeCode == that.tableTypeCode &&
      entityName == that.entityName &&
      entityId == that.entityId
    );
  }

  @Override
  public int hashCode() {
    return Objects.hash(
      super.hashCode(),
      changeColumnId,
      objectPropertyCode,
      objectPropertyName,
      metaDataColumnContent,
      oriColumnContent,
      columnContent,
      subjectChangeType,
      subjectUpdateStatus,
      operationInductionId,
      operateTime,
      isInproperties,
      tableTypeCode,
      entityName,
      entityId
    );
  }

}
